package com.longma.server.service.impl;

import com.longma.server.constant.enums.PTZDirectionEnum;
import com.longma.server.constant.enums.PTZMirrorEnum;
import com.longma.server.constant.enums.PTZSpeedEnum;
import com.longma.server.constant.enums.ProtocolEnum;
import com.longma.server.pojo.UserResponseEntity;
import com.longma.server.pojo.vo.YingshiAddressVO;
import com.longma.server.pojo.vo.YingshiTokenVO;
import com.longma.server.remote.YingshiRemoteService;
import com.longma.server.service.IYingshiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;


/**
 * 萤石摄像头相关接口
 */
@Service
public class YingshiServiceImpl implements IYingshiService {
    @Value("${yingshi.appKey}")
    private String appKey;

    @Value("${yingshi.appSecret}")
    private String appSecret;

    @Autowired
    private YingshiRemoteService yingshiRemoteService;

    /**
     * 根据appKey和secret获取accessToken
     */
    @Override
    public UserResponseEntity<YingshiTokenVO> getAccessToken() {
        return yingshiRemoteService.getAccessToken(appKey,appSecret);
    }

    /**
     * 获取播放地址
     * @param accessToken : 授权过程获取的accessToken
     * @param deviceSerial : 设备序列号，例如427734222，均采用英文符号，限制50个
     * @param validateCode : 如果视频进行了加密 ezopen协议地址的设备的视频加密密码
     * @param protocol: 流播放协议，1-ezopen、2-hls、3-rtmp、4-flv，默认为1
     * @param supportH265 : 是否要求视频为H265编码格式
     */
    @Override
    public UserResponseEntity<YingshiAddressVO> getAddress(String accessToken, String deviceSerial, String validateCode, ProtocolEnum protocol, Boolean supportH265) {
        return yingshiRemoteService.getAddress(accessToken,deviceSerial, validateCode,protocol.getValue(),Boolean.TRUE.equals(supportH265) ? 1:0);
    }

    /**
     * 添加设备到账号下
     * @param accessToken：授权过程获取的accessToken
     * @param deviceSerial： 设备序列号,存在英文字母的设备序列号，字母需为大写
     * @param validateCode： 设备验证码，设备机身上的六位大写字母
     */
    @Override
    public UserResponseEntity<String> addDevice(String accessToken, String deviceSerial, String validateCode) {
        return yingshiRemoteService.addDevice(accessToken,deviceSerial,validateCode);
    }

    /**
     * 开始云台控制
     * @param accessToken：授权过程获取的accessToken
     * @param deviceSerial： 设备序列号,存在英文字母的设备序列号，字母需为大写
     * @param direction : 方向
     * @param speed ： 速度
     */
    @Override
    public UserResponseEntity<String> startPTZControl(String accessToken, String deviceSerial, PTZDirectionEnum direction, PTZSpeedEnum speed) {
        return yingshiRemoteService.startPTZControl(accessToken,deviceSerial,direction.getValue(),speed.getValue());
    }

    /**
     * 停止云台控制
     * @param accessToken：授权过程获取的accessToken
     * @param deviceSerial： 设备序列号,存在英文字母的设备序列号，字母需为大写
     * @param direction : 方向
     */
    @Override
    public UserResponseEntity<String> stopPTZControl(String accessToken, String deviceSerial, PTZDirectionEnum direction) {
        return yingshiRemoteService.stopPTZControl(accessToken,deviceSerial,direction.getValue());
    }

    /**
     * 对设备进行镜像翻转操作(需要设备支持)
     * @param accessToken：授权过程获取的accessToken
     * @param deviceSerial： 设备序列号,存在英文字母的设备序列号，字母需为大写
     * @param command : 镜像方向
     */
    @Override
    public UserResponseEntity<String> mirrorPTZ(String accessToken, String deviceSerial, PTZMirrorEnum command) {
        return yingshiRemoteService.mirrorPTZ(accessToken,deviceSerial,1,command.getValue());
    }

    /**
     * 根据设备验证码关闭设备视频加密开关
     */
    @Override
    public UserResponseEntity<String> closeEncrypt(String accessToken, String deviceSerial, String validateCode) {
        return yingshiRemoteService.closeEncrypt(accessToken,deviceSerial,validateCode);
    }

    /**
     * 开启设备视频加密
     */
    @Override
    public UserResponseEntity<String> openEncrypt(String accessToken, String deviceSerial) {
        return yingshiRemoteService.openEncrypt(accessToken,deviceSerial);
    }
}
